// Copyright 2000-2002 FreeHEP
package org.xmind.org.freehep.graphicsio;

import java.awt.Dimension;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;

import org.xmind.org.freehep.graphics2d.AbstractVectorGraphics;

/**
 * This class provides specifies added methods for VectorGraphicsIO. All added
 * methods are declared abstract.
 *
 * @author Charles Loomis
 * @author Mark Donszelmann
 * @version $Id: VectorGraphicsIO.java 8584 2006-08-10 23:06:37Z duns $
 */
public abstract class VectorGraphicsIO extends AbstractVectorGraphics {

    public VectorGraphicsIO() {
        super();
    }

    public VectorGraphicsIO(VectorGraphicsIO graphics) {
        super(graphics);
    }

    public abstract Dimension getSize();

    public abstract void printComment(String comment);

    /**
     * copies the full file referenced by filenam onto the os (PrintWriter). The
     * file location is relative to the current class
     *
     * @param object from which to refer to resource file
     * @param fileName name of file to be copied
     * @param os output to copy the file to
     */
    public static void copyResourceTo(Object object, String fileName,
            PrintStream os) {
        copyResourceTo(object, fileName, new PrintWriter(
                new OutputStreamWriter(os)));
    }

    public static void copyResourceTo(Object object, String fileName,
            PrintWriter os) {
        InputStream is = null;
        BufferedReader br = null;
        try {
            is = object.getClass().getResourceAsStream(fileName);
            br = new BufferedReader(new InputStreamReader(is));
            String s;
            while ((s = br.readLine()) != null) {
                os.println(s);
            }
            os.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)
                    br.close();
                if (is != null)
                    is.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
